Process and Operation Feasibility
For a non-optional process or operation, feasibility modules are used to specify two kinds of conditions:
-
Conditions under which it is possible (in the context of the current routing) to use the process or operation in the creation of the current part. If the conditions aren’t met, the current routing fails.
-
Conditions under which it is required (in the context of the current routing) to use the process or operation in the creation of the current part. If the conditions aren’t met, the current routing fails.
For an optional process or operation, the feasibility module specifies just the first kind of condition (conditions under which it is possible); the optionality module specifies the second kind (see Process and Operation Optionality).
The module should return true if the conditions are met, and return false otherwise.
So for example an injection molding feasibility module might check for compatibility between the process and the current material; the feasibility module for a tube laser hole cutting operation might check that the hole is large enough and not flanged, threaded, or countersunk (see the examples below).
When you navigate to the CSL modules for a node (see Navigating to the Data for a Given Node), if the node has a feasibility module, the module’s Type Name field is set routingRule, and the label routingRule appears next to the folder icon.
Feasibility module names should start with pfr (for processes) or ofr (for operations) and end with .csl.
This section includes the following subsections:
Context of Evaluation
Feasibility modules are evaluated in the context of a process routing or operation sequence that includes the current node.
The cost engine has established a process-operation hierarchy that includes the nodes in the current routing or sequence and all their ancestors. The cost engine has not yet established the descendents in the process-operation hierarchy of the nodes in the current routing or sequence. The cost engine might not have yet established the portion of the hierarchy that includes operations to create a given sibling of the current GCD.
The cost engine has chosen a particular candidate material stock (if relevant). A machine or tool for the current node has not yet been chosen, and no nodes have yet been costed.
Examples
In aPriori ’s starting point cost model for plastic molding, the feasibility module for the Injection Molding process checks that the current material is compatible with injection molding.
Rule CompatibleMaterial: material.canIM_SFM
Message CompatibleMaterial: _
'Failed because you cannot Injection Mold this type of material'
This rule uses the CSL standard input material, which has one field for each attribute of the current material (as listed in the Material Composition table of aPriori ’s Material Selection dialog). The attribute canIM_SFM is set to true for thermoplastics and false for thermosetting materials.
In the Bar&Tube process group, the operation that uses a tube laser to create a simple hole has the following feasibility module:
import libGtolProcessCapabilities.csl
Rule GtolValueOk: IsProcessAllGtolCapable(gcd, 'Laser Cut')
Message GtolValueOk: IsProcessAllGtolCapableMsg(gcd, 'Laser Cut')
Rule NonPositiveDiameter: gcd.diameter > 0
Message NonPositiveDiameter: _
'Cant laser cut a simple hole with a non-positive diameter: ' + _
diameter + ' mm'
diameter = roundEps(gcd.diameter, 0.01)
Rule NonPositiveLength: gcd.length > 0
Message NonPositiveLength: _
'Can t laser cut a simple hole with a non-positive length (depth): ' + _
holeLength + ' mm'
holeLength = roundEps(gcd.length, 0.01)
Rule IsFlanged: (not gcd.isFlanged)
Message IsFlanged: _
'Hole is flanged so cannot be completed by laser cutting'
Rule isUnthreaded: gcd.threaded == false
Message isUnthreaded: _
'The hole is threaded. Laser cutting alone will not make a threaded hole'
Rule isNotCountersunk: gcd.isCountersunk == false
Message isNotCountersunk: _
'The hole is countersunk. Laser Cutting alone will not make a countersunk hole'
Rule isNotBlind: gcd.isBlind == false
Message isNotBlind: _
'The hole is blind. A blind hole cannot be laser cut'
The rules use the following fields of the CSL standard input gcd:
-
diameter -
length -
tolerance -
isFlanged -
threaded -
isCountersunk -
isBlind
The messages rely on formulas that round off the numerical values to the nearest 1/100th.
The function IsProcessAllGtolCapable is defined in the library libGtolProcessCapabilities.csl.